package loc


import java.util.Date;
import java.util.logging.Logger;
import src.de.checker.hochzeit.domain.util.*;
import src.de.checker.hochzeit.domain.user.*;
import src.de.checker.hochzeit.domain.location.*;
import src.de.checker.hochzeit.konstanten.*
import src.de.checker.hochzeit.util.*;
import com.google.appengine.api.datastore.*
import static com.google.appengine.api.datastore.FetchOptions.Builder.*
/**
 * Verwaltet die Funktionen, die für die Checkliste nötig sind.
 */
Logger log = Logger.getLogger('LocationController');

def myuser = session.getAttribute(Konstanten.SESSION_USER);
int asc = -1;
int desc = 1;

if(myuser != null)
{
	if(params?.index ==~ /(?i)true/)
	{
		index()
	}
	if(params?.show ==~ /(?i)true/)
	{
		show()
	}
	
}
private void index()
{
	def myuser = session.getAttribute(Konstanten.SESSION_USER);
	String feier = myuser.feier
	
	String sort = "name"
	int order = getOrder()
	
	if(params.sort)
		sort = params.sort
	
	//Alle bereits gespeicherten Locations für die Feier suchen
	def query = new Query(Konstanten.LOCATION)
	query.addFilter("feier", Query.FilterOperator.EQUAL, feier)
	query.addFilter("active", Query.FilterOperator.EQUAL, true)
	if(!sort.equals(''))
	{
		if(order == -1)
			query.addSort(sort, Query.SortDirection.ASCENDING)
		else
			query.addSort(sort, Query.SortDirection.DESCENDING)
	}		
	PreparedQuery preparedQuery = datastore.prepare(query)
 	def entities = preparedQuery.asList( withLimit(300) )
 	request['list'] = entities
 	request['order'] = order;
 	forward '/loc/index.gtpl'
}
private void show()
{
	def myuser = session.getAttribute(Konstanten.SESSION_USER);
	String feier = myuser.feier
	
	try
	{
		Key k = KeyFactory.stringToKey(params.key)
		def entity = datastore.get(k);
		if(!entity)
		{
			createTracer('Lokation nicht gefunden zum editieren zum Key: '+k)
		}
		else
		{
			if(entity.feier.equals(feier))
			{
				request['item'] =  entity
				forward '/loc/show.gtpl'
			}
			else
			{
				String message = 'Der Benutzer will eine Lokation editieren, die nicht zur eigenen Feier gehört: '+entity.key
				createTracer(Konstanten.TRACER_VERBOTEN, message)
				log.warning('Benutzer '+myuser.anzeigename+' ['+myuser.key+'] hat versucht eine Lokation' +
						' zu editieren, die nicht zur eigenen Feier gehört. Location: '+entity.key)
				index()
			}
		}
	}
	//Hier kommt man hin, wenn man am request-parameter params.key selber rumpfuscht
	catch(Exception e)
	{
		String message = 'Der Benutzer will eine Lokation editieren, die es nicht gibt. params.key: '+params.key 
		createTracer(Konstanten.TRACER_VERBOTEN, message)
		log.warning(e.toString())
		log.warning("locations.edit(): Item nicht gefunden zum editieren. Benutzer der gesucht hat: "+myuser+" Params: "+params)
		index()
	}
}

private void createTracer(String message)
{
	createTracer(Konstanten.TRACER_FORGOT, message);
}
private void createTracer(String type, String message) {
	try
	{
		def myuser = session.getAttribute(Konstanten.SESSION_USER);

		Tracer t = new Tracer()
	    t.ipadresse = request.getRemoteAddr()
	    t.user = myuser.key
	    t.type = type
	    t.nachricht = message
	    t.datum = Datehelper.getNow()
	    Entity e2 = t as Entity
		e2.save()
	}
	catch(Exception e)
	{
		
	}
}

private int getOrder()
{
	private int myorder = -1;
	if(params.order && !params.order.equals('') && !params.order.equalsIgnoreCase('null'))
	{
		try
		{
			String wert = params.order
			int order = (new Integer(wert)).intValue()
			myorder = order * -1
		}
		catch(Exception e)
		{
			e.printStackTrace()
		}
	}
	
	return myorder;
}